// 对axios进行二次封装
import axios from 'axios'
import qs from 'qs'
import router from '../router'

// 1. 创建一个instance伪实例
const instance = axios.create({
  baseURL: '/api'
})
// 2. 添加请求拦截器
instance.interceptors.request.use(config => {
  // 对请求参数进行url-encoded形式的转换
  config.data = qs.stringify(config.data)

  const token = localStorage.getItem('token_id')
  if(config.headers.needToken) {
    if(token) {
      config.headers['Authorization'] = token
    } else {
      throw Error('无token,请先登录')
    }
  } 

  // 必须返回config配置对象
  return config
})

// 3. 添加响应拦截器
instance.interceptors.response.use(
  response => response.data,
  error => {
    // alert('请求失败')
    if(!error.response) {
      alert(error.message)
      // 跳转至登录页
      if(router.currentRoute.path !== '/login') {
        router.replace('/login')
      } else { // 发送请求后获取错误信息对象
        if(error.response.status === 401) {
          alert('token过期,重新登录')
          // 跳转至登录页
        if(router.currentRoute.path !== '/login') {
          router.replace('/login')
        }
      } else if(error.response.status === 404) {
        alert('请求资源为找到')
      } else {
        alert('请求出错')
      }
    }
    // return一个pending状态的promise,终止promise链
    return new Promise(() => {})
    }
  }
)

// 向外暴露instance
export default instance